const { app, BrowserWindow, Menu } = require("electron");
const path = require("path");
const url = require("url");
const { getConfig, log } = require("./util");

require("./functions");

// 用户设置
const config = getConfig();
global.config = { ...config };

// 浏览器引用
let mainWindow;

// 必要的全局错误捕获
process.on("uncaughtException", (error) => {
  console.log("error:", error);
  log.error("uncaughtException：" + error.stack || JSON.stringify(error));
  app.exit();
});

// 创建浏览器窗口函数
let createWindow = () => {
  // 创建浏览器窗口
  mainWindow = new BrowserWindow({
    width: 1000,
    height: 800,
    minWidth: 950,
    minHeight: 700,
    backgroundColor: "#30303d",
    // 隐藏标题栏
    frame: false,
    // 自动隐藏菜单
    autoHideMenuBar: true,
    webPreferences: {
      javascript: true,
      plugins: true,
      nodeIntegration: true, // 是否集成 Nodejs
      webSecurity: false,
    },
    // macOS 交通灯显示在左上角
    // titleBarStyle: "hiddenInset",
    // 默认标题栏
    // title: app.getName()
    // 引用最大最小话 固定窗口大小
    // maximizable: false
  });

  /*隐藏electron的菜单栏*/
  Menu.setApplicationMenu(null);

  if (process.env.NODE_ENV === "development") {
    mainWindow.loadURL("http://localhost:3000/");
    // 打开开发者工具
    mainWindow.webContents.openDevTools();
  } else {
    mainWindow.loadURL(
      url.format({
        pathname: path.join(__dirname, "../build/index.html"),
        protocol: "file:",
        slashes: true,
      })
    );
  }

  /**
   * 关闭窗口时，决定是否关闭
   * windows在任务栏中或者在多任务列表关闭窗口时触发
   */
  mainWindow.on("close", () => {
    // console.log("close");
  });

  // 当window被关闭时，除掉window的引用
  mainWindow.on("closed", () => {
    // console.log("closed");
    mainWindow = null;
  });
};

// 当app准备就绪时候开启窗口
app.on("ready", createWindow);

/**
 * 当监听了window-all-closed之后，其它三种事件监听就会失效。
 * 其它三种事件的执行顺序，从他们的语义可以得知：before-quit-->will-quit-->quit
 */
// 当全部窗口都被关闭之后退出
app.on("window-all-closed", () => {
  console.log("window-all-closed");
  //  如果不是macOS，则退出
  if (process.platform !== "darwin") {
    app.quit();
  }
});
app.on("before-quit", () => {
  console.log("before-quit");
});
app.on("will-quit", () => {
  console.log("will-quit");
});
app.on("quit", () => {
  console.log("quit");
});

// 在macos上，单击dock图标并且没有其他窗口打开的时候，重新创建一个窗口
app.on("activate", () => {
  if (BrowserWindow.getAllWindows().length === 0) createWindow();
});
